package appbenedictoxvi;

import java.util.ArrayList;

public class AdmGrupo_Estudio {

    ArrayList<Grupo_Estudio> lstgrupo_estudios;
    Validaciones objVal = new Validaciones();
     
    public AdmGrupo_Estudio() {
        lstgrupo_estudios= new ArrayList<Grupo_Estudio>();
    }

    public ArrayList<Grupo_Estudio> getLstgrupo_estudios() {
        return lstgrupo_estudios;
    }

    public void setLstgrupo_estudios(ArrayList<Grupo_Estudio> lstgrupo_estudios) {
        this.lstgrupo_estudios = lstgrupo_estudios;
    }
   
    public void registraGrupo_Estudio(String cod_grupo,String nombre_grupo,String academia,
    Curso  curso, String fecha_inicio, String fecha_fin,String estado,String descripcion,
    Instructor instructor,String link_syllabus,Local local,Aula aula ,String coordenadas) throws BusinessException{
        Grupo_Estudio objGrupo=new Grupo_Estudio(cod_grupo,nombre_grupo,academia,
        curso,fecha_inicio,fecha_fin,estado,descripcion,instructor,link_syllabus,
        local,aula,coordenadas);
      
        validarDatos(cod_grupo,nombre_grupo,academia,curso,fecha_inicio,
        fecha_fin,estado,descripcion,instructor,link_syllabus,local,aula,coordenadas);
         
        //Adicionamos los registros
        lstgrupo_estudios.add(objGrupo);
    }

    public Grupo_Estudio buscarGrupo_Estudio(String cod_grupo)
    {
        for (Grupo_Estudio grupo_Estudio:lstgrupo_estudios){
            if (grupo_Estudio.getCod_grupo().equals(cod_grupo))
            {
            return grupo_Estudio;
            }   
        }
        return null;
    }
    
    private void validarDatos(String cod_grupo,String nombre_grupo,String academia,
    Curso  curso, String fecha_inicio, String fecha_fin,String estado,String descripcion,
    Instructor instructor,String link_syllabus,Local local,Aula aula ,String coordenadas) throws BusinessException{
       
        validarDatosMandatorios(cod_grupo,nombre_grupo,academia,curso,fecha_inicio,
        fecha_fin,estado,descripcion,instructor,link_syllabus,local,aula,coordenadas);
        
        validarDuplicidad(cod_grupo);
    }
    
    private void validarDatosMandatorios(String cod_grupo,String nombre_grupo,String academia,
    Curso  curso, String fecha_inicio, String fecha_fin,String estado,String descripcion,
    Instructor instructor,String link_syllabus,Local local,Aula aula ,String coordenadas) throws BusinessException
    {
        String mensaje="";
        
        if (cod_grupo==null || cod_grupo.isEmpty()){
        mensaje+="Código no puede ser vacio. ";
        }
        if (nombre_grupo==null || nombre_grupo.isEmpty()){
        mensaje+="Nombre no puede ser vacio.";
        }
        if (academia==null || academia.isEmpty()){
        mensaje+="Academia no puede ser vacio.";
        }
        if (curso==null){
        mensaje+="Curso no puede ser vacio.";
        }
        if (fecha_inicio==null || fecha_inicio.isEmpty()){
        mensaje+="Fecha de inicio no puede ser vacio.";
        }
        if (fecha_fin==null || fecha_fin.isEmpty()){
        mensaje+="Fecha fin no puede ser vacio.";
        }
        if (estado==null || estado.isEmpty()){
        mensaje+="Estado no puede ser vacio.";
        }
        if (descripcion==null || descripcion.isEmpty()){
        mensaje+="Descripción no puede ser vacio.";
        }
        if (instructor==null){
        mensaje+="Instructor no puede ser vacio.";
        }
        if (link_syllabus==null || link_syllabus.isEmpty()){
        mensaje+="Nombre no puede ser vacio.";
        }
        if (local==null){
        mensaje+="Local no puede ser vacio.";
        }       
        if (aula==null){
        mensaje+="Aula no puede ser vacio.";
        }        
        if (coordenadas==null || coordenadas.isEmpty()){
        mensaje+="Coordenadas no puede ser vacio.";
        }  

        //Si hay mensaje que mostrar lanzar la exepción
        if (!mensaje.isEmpty()){
            throw new BusinessException(mensaje);
        }
    }
    
    private void validarDuplicidad(String cod_grupo) throws BusinessException
    {
        Grupo_Estudio grupo_Estudio = buscarGrupo_Estudio(cod_grupo);
        if (grupo_Estudio!=null){
            String mensaje ="Código " + cod_grupo + " duplicado";
            throw new BusinessException(mensaje);
        }
    }
    
    public void eliminarGrupo_Estudio(String cod_grupo) throws BusinessException
    {
        Grupo_Estudio grupo_Estudio = buscarGrupo_Estudio(cod_grupo);
        if (grupo_Estudio != null){
              lstgrupo_estudios.remove(grupo_Estudio);
           
        } else {
            ValidarEliminacionDeUnGrupo_EstudioInexistente(cod_grupo);  
        }
    }

    private void ValidarEliminacionDeUnGrupo_EstudioInexistente(String cod_grupo) throws BusinessException 
    {
        Grupo_Estudio grupo_Estudio= buscarGrupo_Estudio(cod_grupo);
        if (grupo_Estudio == null) {
            String mensaje = "Grupo de estudio a eliminar con código " + cod_grupo + " no existe.";
            throw new BusinessException(mensaje);
        }
    }
    
    public void modificarGrupo_Estudio(String cod_grupo,String nombre_grupo,String academia,
    Curso  curso, String fecha_inicio, String fecha_fin,String estado,String descripcion,
    Instructor instructor,String link_syllabus,Local local,Aula aula,String coordenadas)
    {
        
        Grupo_Estudio grupo_Estudio = buscarGrupo_Estudio(cod_grupo);
         if (grupo_Estudio != null) {
          
            grupo_Estudio.setNombre_grupo(nombre_grupo);      
            grupo_Estudio.setAcademia(academia); 
            grupo_Estudio.setCurso(curso); 
            grupo_Estudio.setFecha_inicio(fecha_inicio); 
            grupo_Estudio.setFecha_fin(fecha_fin); 
            grupo_Estudio.setEstado(estado); 
            grupo_Estudio.setDescripcion(descripcion); 
            grupo_Estudio.setInstructor(instructor); 
            grupo_Estudio.setLink_syllabus(link_syllabus); 
            grupo_Estudio.setLocal(local); 
            grupo_Estudio.setAula(aula); 
            grupo_Estudio.setCoordenadas(coordenadas); 
            
        }
    }
  public ArrayList<Grupo_Estudio> filtroGrupoEstudio(String nombre_grupo,String academia
           ,    Curso curso
            ,String fecha_inicio,String fecha_fin,String estado) throws BusinessException {
        
        ArrayList<Grupo_Estudio> filtros = new ArrayList<Grupo_Estudio>();
             
        for (Grupo_Estudio objGrupo : lstgrupo_estudios) {
            if (objGrupo.getNombre_grupo().contains(nombre_grupo) &&
                    objGrupo.getAcademia().contains(academia) &&
                    objGrupo.getCurso().getNom_curso().contains(curso.getNom_curso()) &&
                    //((Curso)objGrupo.getCurso()).getNom_curso().contains(curso.getNom_curso())&&
                    objGrupo.getFecha_inicio().contains(fecha_inicio) &&
                    objGrupo.getFecha_fin().contains(fecha_fin) &&
                    objGrupo.getEstado().contains(estado)) {
                    filtros.add(objGrupo);
            }
        }
        if (filtros.size() == 0){
            String mensaje = "No se encontraron registros para los filtros ingresados";
            throw new BusinessException(mensaje);
        } else {
            String mensaje = "Se encontraron: ";
            throw new BusinessException(mensaje + filtros.size() + " coincidencias");
        }
        
    }
    
    public ArrayList<Grupo_Estudio> filtroGrupoEstudioListar(String nombre_grupo,String academia
           ,    Curso curso
            ,String fecha_inicio,String fecha_fin,String estado) {
        
    ArrayList<Grupo_Estudio> filtros = new ArrayList<Grupo_Estudio>();
    //filtros = new ArrayList<Cliente>();

    for (Grupo_Estudio objGrupo :lstgrupo_estudios) {
        if (objGrupo.getAcademia().contains(academia) &&
                    objGrupo.getCurso().getNom_curso().contains(curso.getNom_curso()) &&
                    //((Curso)objGrupo.getCurso()).getNom_curso().contains(curso.getNom_curso())&&
                    objGrupo.getFecha_inicio().contains(fecha_inicio) &&
                    objGrupo.getFecha_fin().contains(fecha_fin) &&
                    objGrupo.getEstado().contains(estado)) {
            filtros.add(objGrupo);
        }
    }
    return filtros;
    }


}